package 双指针;

/**
 * @author admin
 * @version 1.0.0
 * @ClassName 替换后的最长重复字符.java
 * @Description TODO
 * @createTime 2020年10月17日 15:24:00
 * 给你一个仅由大写英文字母组成的字符串，你可以将任意位置上的字符替换成另外的字符，总共可最多替换 k 次。在执行上述操作后，找到包含重复字母的最长子串的长度。
 *
 * 注意:
 * 字符串长度 和 k 不会超过 104。
 *
 * 示例 1:
 *
 * 输入:
 * s = "ABAB", k = 2
 *
 * 输出:
 * 4
 *
 * 解释:
 * 用两个'A'替换为两个'B',反之亦然。
 * 示例 2:
 *
 * 输入:
 * s = "AABABBA", k = 1
 *
 * 输出:
 * 4
 *
 * 解释:
 * 将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。
 * 子串 "BBBB" 有最长重复字母, 答案为 4。
// *用一个变量记录可替换的次数
//        *     //从头开始找相同的字符 遇到不同的就将次数减一 如果次数为0就记录下当前窗口大小
//        *     //重置窗口和次数
//        *     //如果当前字符串中的出现次数最多的字母个数+K大于串长度，那么这个串就是满足条件的
// */
public class 替换后的最长重复字符 {
//    class Solution {
//        private int[] map = new int[26];
//
//        public int characterReplacement(String s, int k) {
//            if (s == null) {
//                return 0;
//            }
//            char[] chars = s.toCharArray();
//            int left = 0;
//            int right = 0;
//            int historyCharMax = 0;
//            for (right = 0; right < chars.length; right++) {
//                int index = chars[right] - 'A';
//                map[index]++;
//                historyCharMax = Math.max(historyCharMax, map[index]);
//                if (right - left + 1 > historyCharMax + k) {
//                    map[chars[left] - 'A']--;
//                    left++;
//                }
//            }
//            return chars.length - left;
//        }
//    }

}
